package com.commerce.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.commerce.common.entity.FlashSale;
import com.commerce.common.entity.FlashSaleProduct;


import java.util.List;

/**
 * 秒杀活动服务接口
 */
public interface FlashSaleService extends IService<FlashSale> {

    /**
     * 获取当前进行中的秒杀活动
     */
    FlashSale getCurrentFlashSale();

    /**
     * 获取所有秒杀时间段
     */
    List<FlashSale> getAllPeriods();

    /**
     * 获取秒杀活动的商品列表
     * 
     * @param flashSaleId 秒杀活动ID
     * @return 秒杀商品列表
     */
    List<FlashSaleProduct> getFlashSaleProducts(Long flashSaleId);

    /**
     * 用户参与秒杀
     * 
     * @param flashSaleId 秒杀活动ID
     * @param productId 商品ID
     * @param userId 用户ID
     * @param quantity 购买数量
     * @return 是否成功
     */
    boolean purchaseFlashSaleProduct(Long flashSaleId, Long productId, Long userId, Integer quantity);

    /**
     * 添加秒杀活动
     * 
     * @param flashSale 秒杀活动信息
     * @return 是否成功
     */
    boolean addFlashSale(FlashSale flashSale);

    /**
     * 添加秒杀商品
     *
     * @param flashSaleId 秒杀活动ID
     * @param product 秒杀商品信息
     * @return 是否成功
     */
    boolean addFlashSaleProduct(Long flashSaleId, FlashSaleProduct product);

    /**
     * 更新秒杀商品
     *
     * @param id 秒杀商品ID
     * @param flashSaleId 秒杀活动ID
     * @param status 商品状态
     * @param params 更新参数
     * @return 是否成功
     */
    boolean updateFlashSaleProduct(Long id, Long flashSaleId, Integer status, java.util.Map<String, Object> params);

    /**
     * 删除秒杀商品
     *
     * @param id 秒杀商品ID
     * @return 是否成功
     */
    boolean deleteFlashSaleProduct(Long id);

    /**
     * 更新秒杀活动
     *
     * @param flashSale 秒杀活动信息
     * @return 是否成功
     */
    boolean updateFlashSale(FlashSale flashSale);

    /**
     * 删除秒杀活动
     *
     * @param id 秒杀活动ID
     * @return 是否成功
     */
    boolean deleteFlashSale(Long id);

    /**
     * 获取热门秒杀商品
     */
    List<FlashSaleProduct> getHotFlashSaleProducts(Integer limit);

    /**
     * 获取即将开始的秒杀活动
     */
    List<FlashSale> getUpcomingFlashSales(Integer limit);

    /**
     * 搜索秒杀商品
     */
    List<FlashSaleProduct> searchFlashSaleProducts(String keyword, Integer page, Integer size);
}